package com.demo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.demo.entity.DischargeSummary;
import com.demo.entity.Vo.DischargeSummaryVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

/**
 * 出院总结表 Mapper 接口
 * @author zm
 * @since 2020-12
 */
@Repository
public interface DischargeSummaryMapper extends BaseMapper<DischargeSummary> {

    /**
     * 获取出院总结列表
     * @param dischargeSummaryId      出院总结ID
     * @param patientId               患者ID
     * @return
     */
    List<DischargeSummaryVo> getSummaryList(Integer pageNumber, Integer pageSize,@Param("dischargeSummaryId")Integer dischargeSummaryId,@Param("patientId") Integer patientId);

    /**
     * 获取出院总结总记录数
     * @return
     */
    Integer getCount(@Param("patientId") Integer pstientId);

    /**
     * 数据导出--出院总结
     * @param dischargeWhereabouts    出院转归
     * @param startTime               出院时间【开始】
     * @param endTime                 出院时间【结束】
     * @return
     */
    List<DischargeSummaryVo> getSummaryExport(@Param("dischargeWhereabouts")Integer dischargeWhereabouts, @Param("startTime")Date startTime,@Param("endTime")Date endTime);

    /**
     * 查询医院内非预期死亡人数 ==1
     * @param patientId    患者ID集合
     * @param startTime
     * @param endTime
     * @return
     */
    List<Integer> getSumExpectedDeath(@Param("patientId")List<Integer> patientId,@Param("startTime")Date startTime,@Param("endTime")Date endTime);


    /**
     * 查询医院内PTE死亡发生人数
     * @param patientId    患者ID集合
     * @param startTime
     * @param endTime
     * @return
     */
    List<Integer> getSumExpectedDeathPie(@Param("patientId")List<Integer> patientId,@Param("startTime")Date startTime,@Param("endTime")Date endTime);

    /**
     * 查询医院内死亡病例数
     * @param startTime
     * @param endTime
     * @return
     */
    List<Integer> getDeathSum(@Param("startTime")Date startTime,@Param("endTime")Date endTime);

    /**
     * 医院内诊断PTE并且死亡的病例数
     * @param startTime
     * @param endTime
     * @return
     */
    List<Integer> getDeathSumPie(@Param("startTime")Date startTime,@Param("endTime")Date endTime);

    /**
     * 查询诊断为PTE的患者数
     * @param startTime
     * @param endTime
     * @return
     */
    List<Integer> getPiePatientSum(@Param("startTime")Date startTime,@Param("endTime")Date endTime);

    /**
     * 查询出院时未死亡并且诊断为PTE的患者数
     * @param startTime
     * @param endTime
     * @return
     */
    List<Integer> getPiePatientNoDeathSum(@Param("startTime")Date startTime,@Param("endTime")Date endTime);

    /**
     * 通过ID返回对象
     * @param id
     * @return
     */
    DischargeSummary getById(@Param("id")Integer id);

    /**
     * 通过患者ID查询总结
     * @param patientId
     * @return
     */
    DischargeSummary getSummaryByPatientId(@Param("patientId")Integer patientId);

    /**
     * 结局相关指标---医院内非预期死亡发生率
     * @param departments
     * @param deptType
     * @param startTime
     * @param endTime
     * @param dischargeWhereabouts
     * @param isExpectedDeath
     * @param isPte
     * @return
     */

    /**
     * 结局相关指标---医院内非预期死亡发生率 | 医院内PTE死亡发生率 | PTE导致死亡占死亡总数比率 | PTE死亡患者中未预防的比例(分母)
     * 治相关指标  ---PTE诊断成功率
     * @param departments           部门列表
     * @param deptType              科室类型：null-不区分；1-内科；2-外科
     * @param startTime             开始时间
     * @param endTime               结束时间
     * @param dischargeWhereabouts  出院转归 1、医嘱出院 2、非医嘱出院 3、死亡 5、其他
     * @param isExpectedDeath       是否非预期死亡  1.是  2.否
     * @param isPte                 是否肺血栓栓塞症【PIE】   1.是  2.否
     * @return
     */
    Integer getSumByPatientDischarge(@Param("departments") List<Integer> departments,
                                     @Param("deptType") Integer deptType,
                                     @Param("startTime") Date startTime,
                                     @Param("endTime") Date endTime,
                                     @Param("dischargeWhereabouts") Integer[] dischargeWhereabouts,
                                     @Param("isExpectedDeath") Integer isExpectedDeath,
                                     @Param("isPte") Integer isPte);

    /**
     * 结局相关指标---PTE死亡患者中未预防的比例 且含有有有效防治医嘱（分子）
     * 治相关指标  ---PTE诊断成功率
     * @param departments           部门列表
     * @param deptType              科室类型：null-不区分；1-内科；2-外科
     * @param startTime             开始时间
     * @param endTime               结束时间
     * @param dischargeWhereabouts  出院转归 1、医嘱出院 2、非医嘱出院 3、死亡 5、其他
     * @param isExpectedDeath       是否非预期死亡  1.是  2.否
     * @param isPte                 是否肺血栓栓塞症【PIE】   1.是  2.否
     * @return
     */
    List<Integer> getSumByPatientDischargeAndDoctorAdvice(@Param("departments") List<Integer> departments,
                                     @Param("deptType") Integer deptType,
                                     @Param("startTime") Date startTime,
                                     @Param("endTime") Date endTime,
                                     @Param("dischargeWhereabouts") Integer[] dischargeWhereabouts,
                                     @Param("isExpectedDeath") Integer isExpectedDeath,
                                     @Param("isPte") Integer isPte);

}
